﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.IO;
using System.Text;


namespace Prassi2ExpertUpTransfer
{
    public class SequenzeInviiPrassi
    {

        private const string nomeFile = @"\SequenzeInviiPrassi.dat";
        private string baseDir;

        private StringBuilder linesFile = new StringBuilder();
        private string myLine;

        private string sistema;
        public string Sistema { get { return this.sistema; } }

        private string ditta;
        public string Ditta { get { return this.ditta; } }

        private int nrInvio;
        public int NrInvio { get { return this.nrInvio; } }

        public SequenzeInviiPrassi(string sistema, string ditta)
        {

            Assembly ass = Assembly.GetEntryAssembly();
            baseDir = Path.GetDirectoryName(ass.Location);

            string fileTxt, dat_Sistema, dat_Ditta, nrInvioStr;
            this.nrInvio = -1;
            this.sistema = sistema;
            this.ditta = ditta;

            try
            {
                fileTxt = baseDir + nomeFile;

                if (File.Exists(fileTxt))
                {
                    // percorso e nome file al costruttore StreamReader
                    StreamReader sr = new StreamReader(fileTxt);
                    String line = null;

                    // lettura del file di testo con i codici da pulire
                    while ((line = sr.ReadLine()).Length > 0)
                    {
                        linesFile.AppendLine(line);

                        // non memorizzo le righe di commento
                        if (!line.StartsWith("#"))
                        {

                            // arresto il controllo della sequenza invii
                            if (line.StartsWith("STOP_CONTROLLO_SEQUENZE"))
                            {
                                break;
                            }

                            string[] valoriRiga = line.Split(';');

                            dat_Sistema = valoriRiga[0].Trim();
                            dat_Ditta = valoriRiga[1].Trim();
                            nrInvioStr = valoriRiga[2].Trim();
                            // se trovato
                            if (dat_Sistema == Sistema && dat_Ditta == Ditta)
                            {
                                myLine = line;
                                this.nrInvio = Int32.Parse(nrInvioStr);
                            }

                        }
                    }

                    // chiusura del file di testo
                    sr.Close();
                }

            }
            catch (Exception err)
            {
                // TODO Exception rilanciata
                throw err;
            }

        }


        public void AggiornaSequenza(int sequenzaNew)
        {

            // Aggiorno solo se prevista la riga nella tabella
            if (NrInvio == -1) return;

            string fileTxt = baseDir + nomeFile;
            // preparo la nuova linea della tabella sequenze
            string newLine = String.Format(Sistema + ";\t" + Ditta + ";\t{0};", sequenzaNew);
            try
            {
                // sostituzione di ogni occorrenza della linea con la nuova
                linesFile = linesFile.Replace(myLine, newLine);

                using (StreamWriter sw = File.CreateText(fileTxt))
                {
                    sw.WriteLine(linesFile.ToString());
                    sw.Close();
                }

            }
            catch (Exception err)
            {
                // TODO Exception rilanciata
                throw err;
            }

        }
        
    }
}